package com.sie.jta308demo.a108dev;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;
import java.util.Map;

/**
 * 我的适配器
 * @author haozi
 *
 */
public class BtListAdapter extends BaseAdapter {

	public static int PROGRESS;
	@SuppressWarnings("unused")
	private Context context;
	private List<? extends Map<String, ?>> mData;
	private int mResource;
	private String[] mFrom;
	private int[] mTo;
	private LayoutInflater mLayoutInflater;
	
	/**
	 * 我的适配器的构造方法
	 * @param context 调用方的上下文
	 * @param data 数据
	 * @param resource
	 * @param from 
	 * @param to
	 */
	public BtListAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
		
		this.context = context;
		this.mData = data;
		this.mResource = resource;
		this.mFrom = from;
		this.mTo = to;
		this.mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}
	
	/**
	 * 系统在绘制ListView之前，将会先调用getCount方法来获取Item的个数
	 */
	public int getCount() {
		
		return this.mData.size();
	}

	public Object getItem(int position) {
		
		return this.mData.get(position);
	}

	public long getItemId(int position) {
		
		return position;
	}

	/**
	 * 每绘制一个 Item就会调用一次getView方法，
	 * 在此方法内就可以引用事先定义好的xml来确定显示的效果并返回一个View对象作为一个Item显示出来。
	 * 也 正是在这个过程中完成了适配器的主要转换功能，把数据和资源以开发者想要的效果显示出来。
	 * 也正是getView的重复调用，使得ListView的使用更 为简单和灵活。
	 * 这两个方法是自定ListView显示效果中最为重要的，同时只要重写好了就两个方法，ListView就能完全按开发者的要求显示。
	 * 而 getItem和getItemId方法将会在调用ListView的响应方法的时候被调用到。
	 * 所以要保证ListView的各个方法有效的话，这两个方法也得重写。
	 */
	public View getView(int position, View contentView, ViewGroup parent) {
		
		contentView = this.mLayoutInflater.inflate(this.mResource, parent, false);	

		// 设置contentView的内容和样式，这里重点是设置contentView中文字的大小
		for(int index=0; index<this.mTo.length; index++){
			TextView textView = (TextView) contentView.findViewById(this.mTo[index]);
			textView.setText(this.mData.get(position).get(this.mFrom[index]).toString());
			if(index == 0){
				textView.setTextSize(15+PROGRESS);
			}else if(index == 1){
				textView.setTextSize(12+PROGRESS);
			}
		}

		return contentView;
	}
}